package features.advance.leetcode.dynamicProgramming.easy;

import org.assertj.core.util.Lists;

import java.util.List;

/**
 * @author LIN
 * @date 2022-04-29 19:53
 *  118. 杨辉三角
 * 给定一个非负整数 numRows，生成「杨辉三角」的前 numRows 行。
 *
 * 在「杨辉三角」中，每个数是它左上方和右上方的数的和。
 *
 *
 *
 *
 *
 * 示例 1:
 *
 * 输入: numRows = 5
 * 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
 * 示例 2:
 *
 * 输入: numRows = 1
 * 输出: [[1]]
 *
 *
 * 提示:
 *
 * 1 <= numRows <= 30
 */
public class Solution118 {

    public static void main(String[] args) {
        Solution solution = new Solution();

        solution.run(numRows -> {
            System.out.println(numRows);
            List<List<Integer>> r = Lists.newArrayList();
            for (int i = 0; i < numRows; i++) {
                List<Integer> obj = Lists.newArrayList();
                r.add(obj);
                for (int j = 0; j <= i; j++) {
//                    System.out.printf("i:%d , j:%d \n",i,j);
                    if(j > 0 && j < i){
                        int i1 = r.get(i - 1).get(j) + r.get(i - 1).get(j - 1);
                        obj.add(i1);
                    }else{
                        obj.add(1);
                    }
                }
            }
            return r;
        },100, a->{
            for (List<Integer> a1 : a) {
                System.out.println(a1);
            }
        });

    }

    static class Solution {
        public void run(Sol solution, int numRows,Answer answer){
            answer.answer(solution.generate(numRows));
        }
    }

    @FunctionalInterface
    interface Sol{
        List<List<Integer>> generate(int numRows);
    }

    @FunctionalInterface
    interface Answer{
        void answer(List<List<Integer>> a);
    }
}
